package service

//树服务类
var tree = TreeService{}

type TreeService struct {
}
type TreeResouce struct {
	BaseMode interface{}    `json:"base"`      //基础数据
	Id       uint64         `json:"id"`        //当前ID
	ParentId uint64         `json:"patent_id"` //上级Id
	Name     string         `json:"name"`
	Children []*TreeResouce `json:"children"` //这里必须是指针
}

//构建树结构数据
func (s *TreeService) BuildTree(resources []TreeResouce) []*TreeResouce {
	//定义根树，既id=0的根节点，我用的时候并不存在于数据库
	var rootResouce = TreeResouce{}
	//创建一个map，把父级相同的地址归纳起来
	DataMap := make(map[uint64][]*TreeResouce, len(resources))
	//寻找对应的父级，添加子节点集合
	for key, _ := range resources {
		pid := resources[key].ParentId
		DataMap[pid] = append(DataMap[pid], &resources[key])
	}
	for key, _ := range resources {
		if resources[key].ParentId == 0 {
			rootResouce.Children = append(rootResouce.Children, &resources[key])
		}
		resources[key].Children = DataMap[resources[key].Id]
	}
	// 添加完成，既建立树形关系完成
	return rootResouce.Children
}
